package com.irdstudio.efp.nls.service.impl.psd;

import com.irdstudio.basic.framework.core.base.FrameworkService;
import com.irdstudio.efp.nls.service.dao.psd.PreNlsCreditInfoDao;
import com.irdstudio.efp.nls.service.domain.psd.PreNlsCreditInfo;
import com.irdstudio.efp.nls.service.facade.psd.PreNlsCreditInfoService;
import com.irdstudio.efp.nls.service.vo.psd.PreNlsCreditInfoVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;


/**
 *需求编号：【2019D1218】（普税贷需求）
 *问题编号：【2019D1218】（若不是因为修复问题而新增该类，则留空）
 *开发人员：【ludayong】
 *创建日期：【2019/11/20 15:37】
 *功能描述：
 */

@Service("preNlsCreditInfoService")
public class PreNlsCreditInfoServiceImpl implements PreNlsCreditInfoService, FrameworkService {

    private static Logger logger = LoggerFactory.getLogger(PreNlsCreditInfoServiceImpl.class);

    @Autowired
    private PreNlsCreditInfoDao preNlsCreditInfoDao;

    /**
     * 新增数据
     *
     * @param inPreNlsCreditInfoVo
     * @return
     */
    @Override
    public int insertPreNlsCreditInfo(PreNlsCreditInfoVO inPreNlsCreditInfoVo) {
        logger.debug("当前新增数据为:" + inPreNlsCreditInfoVo.toString());
        int num = 0;
        try {
            PreNlsCreditInfo preNlsCreditInfo = new PreNlsCreditInfo();
            beanCopy(inPreNlsCreditInfoVo, preNlsCreditInfo);
            num = preNlsCreditInfoDao.insertPreNlsCreditInfo(preNlsCreditInfo);
        } catch (Exception e) {
            logger.error("新增数据发生异常!", e);
            num = -1;
        }
        logger.debug("当前新增数据条数为:" + num);
        return num;
    }

    /**
     * 根据主键删除信息
     *
     * @param inPreNlsCreditInfoVo
     * @return
     */
    @Override
    public int deleteByPk(PreNlsCreditInfoVO inPreNlsCreditInfoVo) {
        logger.debug("当前删除数据条件为:" + inPreNlsCreditInfoVo);
        int num = 0;
        try {
            PreNlsCreditInfo preNlsCreditInfo = new PreNlsCreditInfo();
            beanCopy(inPreNlsCreditInfoVo, preNlsCreditInfo);
            num = preNlsCreditInfoDao.
                    deleteByPk(preNlsCreditInfo);
        } catch (Exception e) {
            logger.error("删除数据发生异常!", e);
            num = -1;
        }
        logger.debug("根据条件:" + inPreNlsCreditInfoVo + "删除的数据条数为" + num);
        return num;
    }


    /**
     * 根据主键更新信息
     *
     * @param inPreNlsCreditInfoVo
     * @return
     */
    @Override
    public int updateByPk(PreNlsCreditInfoVO inPreNlsCreditInfoVo) {
        logger.debug("当前修改数据为:" + inPreNlsCreditInfoVo.toString());
        int num = 0;
        try {
            PreNlsCreditInfo preNlsCreditInfo = new PreNlsCreditInfo();
            beanCopy(inPreNlsCreditInfoVo, preNlsCreditInfo);
            num = preNlsCreditInfoDao.updateByPk(preNlsCreditInfo);
        } catch (Exception e) {
            logger.error("修改数据发生异常!", e);
            num = -1;
        }
        logger.debug("根据条件:" + inPreNlsCreditInfoVo + "修改的数据条数为" + num);
        return num;
    }

    /**
     * 根据主键查询详情
     *
     * @param inPreNlsCreditInfoVo
     * @return
     */
    @Override
    public PreNlsCreditInfoVO queryByPk(PreNlsCreditInfoVO inPreNlsCreditInfoVo) {

        logger.debug("当前查询参数信息为:" + inPreNlsCreditInfoVo);
        try {
            PreNlsCreditInfo queryPreNlsCreditInfo = new PreNlsCreditInfo();
            beanCopy(inPreNlsCreditInfoVo, queryPreNlsCreditInfo);
            PreNlsCreditInfo queryRslPreNlsCreditInfo = preNlsCreditInfoDao.queryByPk(queryPreNlsCreditInfo);
            if (Objects.nonNull(queryRslPreNlsCreditInfo)) {
                PreNlsCreditInfoVO outPreNlsCreditInfoVo = beanCopy(queryRslPreNlsCreditInfo, new PreNlsCreditInfoVO());
                logger.debug("当前查询结果为:" + outPreNlsCreditInfoVo.toString());
                return outPreNlsCreditInfoVo;
            } else {
                logger.debug("当前查询结果为空!");
            }
        } catch (Exception e) {
            logger.error("查询数据发生异常!", e);
        }
        return null;
    }


    /**
     * 一级数据权限
     *
     * @param preNlsCreditInfoVo
     * @return
     */
    @Override
    public List<PreNlsCreditInfoVO> queryAllByLevelOne(PreNlsCreditInfoVO preNlsCreditInfoVo) {
        logger.debug("查看当前用户对应的数据信息的参数信息为:");
        List<PreNlsCreditInfoVO> list = null;
        try {
            List<PreNlsCreditInfo> preNlsCreditInfos = preNlsCreditInfoDao.queryAllByLevelOneByPage(preNlsCreditInfoVo);
            logger.debug("查看当前用户对应的数据信息的结果集数量为:" + preNlsCreditInfos.size());
            pageSet(preNlsCreditInfos, preNlsCreditInfoVo);
            list = (List<PreNlsCreditInfoVO>) beansCopy(preNlsCreditInfos, PreNlsCreditInfoVO.class);
        } catch (Exception e) {
            logger.error("数据转换出现异常!", e);
        }

        return list;

    }


    /**
     * 二级数据权限
     *
     * @param preNlsCreditInfoVo
     * @return
     */
    @Override
    public List<PreNlsCreditInfoVO> queryAllByLevelTwo(PreNlsCreditInfoVO preNlsCreditInfoVo) {
        logger.debug("查看当前用户及所属机构对应的数据信息的参数信息为:");
        List<PreNlsCreditInfo> preNlsCreditInfos = preNlsCreditInfoDao.queryAllByLevelTwoByPage(preNlsCreditInfoVo);
        logger.debug("查看当前用户及所属机构对应的数据信息的结果集数量为:" + preNlsCreditInfos.size());
        List<PreNlsCreditInfoVO> list = null;
        try {
            pageSet(preNlsCreditInfos, preNlsCreditInfoVo);
            list = (List<PreNlsCreditInfoVO>) beansCopy(preNlsCreditInfos, PreNlsCreditInfoVO.class);
        } catch (Exception e) {
            logger.error("数据转换出现异常!", e);
        }

        return list;

    }


    /**
     * 三级数据权限
     *
     * @param preNlsCreditInfoVo
     * @return
     */
    @Override
    public List<PreNlsCreditInfoVO> queryAllByLevelThree(PreNlsCreditInfoVO preNlsCreditInfoVo) {
        logger.debug("查看当前用户所在机构及下属机构对应的数据信息的参数信息为:");
        List<PreNlsCreditInfo> preNlsCreditInfos = preNlsCreditInfoDao.queryAllByLevelThreeByPage(preNlsCreditInfoVo);
        logger.debug("查看当前用户所在机构及下属机构对应的数据信息的结果集数量为:" + preNlsCreditInfos.size());
        List<PreNlsCreditInfoVO> list = null;
        try {
            pageSet(preNlsCreditInfos, preNlsCreditInfoVo);
            list = (List<PreNlsCreditInfoVO>) beansCopy(preNlsCreditInfos, PreNlsCreditInfoVO.class);
        } catch (Exception e) {
            logger.error("数据转换出现异常!", e);
        }

        return list;
    }

    /**
     * 四级数据权限
     *
     * @param preNlsCreditInfoVo
     * @return
     */
    @Override
    public List<PreNlsCreditInfoVO> queryAllByLevelFour(PreNlsCreditInfoVO preNlsCreditInfoVo) {
        logger.debug("【预留，便于后续自定义 】信息的参数信息为:");
        List<PreNlsCreditInfo> preNlsCreditInfos = preNlsCreditInfoDao.queryAllByLevelFourByPage(preNlsCreditInfoVo);
        logger.debug("【预留，便于后续自定义 】信息的结果集数量为:" + preNlsCreditInfos.size());
        List<PreNlsCreditInfoVO> list = null;
        try {
            pageSet(preNlsCreditInfos, preNlsCreditInfoVo);
            list = (List<PreNlsCreditInfoVO>) beansCopy(preNlsCreditInfos, PreNlsCreditInfoVO.class);
        } catch (Exception e) {
            logger.error("数据转换出现异常!", e);
        }

        return list;
    }

    /**
     * 五级数据权限
     *
     * @param preNlsCreditInfoVo
     * @return
     */
    @Override
    public List<PreNlsCreditInfoVO> queryAllByLevelFive(PreNlsCreditInfoVO preNlsCreditInfoVo) {
        logger.debug("【预留，便于后续自定义 】信息的参数信息为:");
        List<PreNlsCreditInfo> preNlsCreditInfos = preNlsCreditInfoDao.queryAllByLevelFiveByPage(preNlsCreditInfoVo);
        logger.debug("【预留，便于后续自定义 】信息的结果集数量为:" + preNlsCreditInfos.size());
        List<PreNlsCreditInfoVO> list = null;
        try {
            pageSet(preNlsCreditInfos, preNlsCreditInfoVo);
            list = (List<PreNlsCreditInfoVO>) beansCopy(preNlsCreditInfos, PreNlsCreditInfoVO.class);
        } catch (Exception e) {
            logger.error("数据转换出现异常!", e);
        }

        return list;
    }

    /**
     *需求编号：【2019D1218】（普税贷需求）
     *问题编号：【2019D1218】（通过渠道申请号查询普税贷预授信申请信息）
     *开发人员：【ludayong】
     *创建日期：【2019/12/14 11:32】
     *功能描述：
     *修改日期：【2019/12/14 11:32】
     *修改描述：
     */
    @Override
    public PreNlsCreditInfoVO queryByChannelApplyNo(PreNlsCreditInfoVO inPreNlsCreditInfoVo) {
        logger.debug("当前查询参数信息为:" + inPreNlsCreditInfoVo);
        try {
            PreNlsCreditInfo queryPreNlsCreditInfo = new PreNlsCreditInfo();
            beanCopy(inPreNlsCreditInfoVo, queryPreNlsCreditInfo);
            PreNlsCreditInfo queryRslPreNlsCreditInfo = preNlsCreditInfoDao.queryByChannelApplyNo(queryPreNlsCreditInfo);
            if (Objects.nonNull(queryRslPreNlsCreditInfo)) {
                PreNlsCreditInfoVO outPreNlsCreditInfoVo = beanCopy(queryRslPreNlsCreditInfo, new PreNlsCreditInfoVO());
                logger.debug("当前查询结果为:" + outPreNlsCreditInfoVo.toString());
                return outPreNlsCreditInfoVo;
            } else {
                logger.debug("当前查询结果为空!");
            }
        } catch (Exception e) {
            logger.error("查询数据发生异常!", e);
        }
        return null;
    }

    /**
     *需求编号：【2019D1218】（普税贷需求）
     *问题编号：【2019D1218】（通过全局流水号查询普税贷预授信申请信息）
     *开发人员：【ludayong】
     *创建日期：【2019/12/16 16:35】
     *功能描述：
     *修改日期：【2019/12/16 16:35】
     *修改描述：
     */
    @Override
    public PreNlsCreditInfoVO queryByGlobalSerno(PreNlsCreditInfoVO inPreNlsCreditInfoVo) {
        logger.debug("当前查询参数信息为:" + inPreNlsCreditInfoVo);
        try {
            PreNlsCreditInfo queryPreNlsCreditInfo = new PreNlsCreditInfo();
            beanCopy(inPreNlsCreditInfoVo, queryPreNlsCreditInfo);
            PreNlsCreditInfo queryRslPreNlsCreditInfo = preNlsCreditInfoDao.queryByGlobalSerno(queryPreNlsCreditInfo);
            if (Objects.nonNull(queryRslPreNlsCreditInfo)) {
                PreNlsCreditInfoVO outPreNlsCreditInfoVo = beanCopy(queryRslPreNlsCreditInfo, new PreNlsCreditInfoVO());
                logger.debug("当前查询结果为:" + outPreNlsCreditInfoVo.toString());
                return outPreNlsCreditInfoVo;
            } else {
                logger.debug("当前查询结果为空!");
            }
        } catch (Exception e) {
            logger.error("查询数据发生异常!", e);
        }
        return null;
    }

    /**
     *需求编号：【2019D1218】（普税贷需求）
     *问题编号：【2019D1218】（通过法定代表人证件信息和申请时间查询普税贷预授信申请信息）
     *开发人员：【ludayong】
     *创建日期：【2019/12/16 16:35】
     *功能描述：
     *修改日期：【2019/12/16 16:35】
     *修改描述：
     */
    @Override
    public List<PreNlsCreditInfoVO> queryByCertInfoAndApplyDate(PreNlsCreditInfoVO preNlsCreditInfoVo) {
        logger.debug("【预留，便于后续自定义 】信息的参数信息为:");
        List<PreNlsCreditInfo> preNlsCreditInfos = preNlsCreditInfoDao.queryByCertInfoAndApplyDate(preNlsCreditInfoVo);
        if(Objects.nonNull(preNlsCreditInfos)){
            logger.debug("【预留，便于后续自定义 】信息的结果集数量为:" + preNlsCreditInfos.size());
        }else{
            logger.debug("【预留，便于后续自定义 】信息的结果集数量为0");
        }
        List<PreNlsCreditInfoVO> list = null;
        try {
            pageSet(preNlsCreditInfos, preNlsCreditInfoVo);
            list = (List<PreNlsCreditInfoVO>) beansCopy(preNlsCreditInfos, PreNlsCreditInfoVO.class);
        } catch (Exception e) {
            logger.error("数据转换出现异常!", e);
        }
        return list;
    }

    /**
     *需求编号：【2019D1218】（普税贷需求）
     *问题编号：【2019D1218】（通过输入条件查询普税贷预授信申请信息）
     *开发人员：【ludayong】
     *创建日期：【2020/3/25 8:33】
     *功能描述：
     *修改日期：【2020/3/25 8:33】
     *修改描述：
     */
    @Override
    public List<PreNlsCreditInfoVO> queryByCondition(PreNlsCreditInfoVO preNlsCreditInfoVo) {
        logger.debug("【预留，便于后续自定义 】信息的参数信息为:");
        List<PreNlsCreditInfo> preNlsCreditInfos = preNlsCreditInfoDao.queryByCondition(preNlsCreditInfoVo);
        if(Objects.nonNull(preNlsCreditInfos)){
            logger.debug("【预留，便于后续自定义 】信息的结果集数量为:" + preNlsCreditInfos.size());
        }else{
            logger.debug("【预留，便于后续自定义 】信息的结果集数量为0");
        }
        List<PreNlsCreditInfoVO> list = null;
        try {
            pageSet(preNlsCreditInfos, preNlsCreditInfoVo);
            list = (List<PreNlsCreditInfoVO>) beansCopy(preNlsCreditInfos, PreNlsCreditInfoVO.class);
        } catch (Exception e) {
            logger.error("数据转换出现异常!", e);
        }
        return list;
    }

    @Override
    public List<PreNlsCreditInfoVO> queryByTaxNumber(String taxNumber) throws Exception {
        return (List<PreNlsCreditInfoVO>) beansCopy(preNlsCreditInfoDao.queryByTaxNumber(taxNumber), PreNlsCreditInfoVO.class);
    }
}
